运维利用python开发自己的小程序或小工具,学习这篇就够了 | 您所在的位置:网站首页 › python 编写程序 › 运维利用python开发自己的小程序或小工具,学习这篇就够了 |
利用python中的tkinter来开发自己的小程序或小工具之查询数据库并返回和导出查询结果
本人也是python小白,各位大佬不要喷,毕竟咱不是专业的开发的,只是为了偷懒,写一下自己的小程序,如果大佬可以帮自己完善一下的话,自己也是很高兴的。 这个工具可以用来干什么 如果你需要经常的从数据库里面提取数据,那么他可以帮你实现 如果你热爱爬虫的话,需要美化一下操作界面的话,那么你可能需要他 如果你想逗你女朋友开心的话,那么你可能值得拥有他 等等等等等。。。 先来看看效果建议一定要看这个效果图哈,否则,你到下面的代码就是一脸懵 python运维小工具(1) 1. 思路思路是非常重要的,有一个好的思路,能让自己事半功倍 我的实例工具,思路如下 利用tkinter来构建基本的工具框架,也就是程序或者工具UI界面(小编是找了张A4纸,用铅笔花出来的,\哭) 需要具体能实现功能的python代码,需要镶嵌到框架中 建立个测试环境,测试一下看看效果如何 2. 实操 先引入我们需要的模板 #!/usr/bin/env python # coding:gbk import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys import tkinter as tk :这个是今天的主角 import tkinter.messagebox :这个是弹出来的那个框口 import pymssql:这个是连接数据库用的,我这边的是sql server数据库 import datetime:这个是获取当前时间用的,主要是一个导出文件的时候命名作用 import openpyxl:这个是操作execl用的,把查询结果写入到execl表中 import split:这个是字符切割用的 import time:这个用来时间延长的。time.sleep import os:这个是获取当前程序运行路径的,方便放置或者提醒文件保存位置 import sys:这个好像没用到,先写上吧 再构建出我们需要的大框也就是我们外面用到的大框 import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示 root.geometry("950x300") #这个是框的大小 root.mainloop() # 进入消息循环效果如下: 效果和上面的一样: 效果图: 效果如下: 效果图: 看到了这里相信大家也是不是感觉非常简单可呢,下面小编就把第二个框里面的内容结合源码一起讲了哈 整体源码: #!/usr/bin/env python # coding:gbk import tkinter as tk import tkinter.messagebox import pymssql import datetime import openpyxl import split import time import os import sys root = tk.Tk() # 创建窗口对象的背景色 root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") root.geometry("950x300") #第一个框开始 denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5) denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10) tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0) tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0) tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0) tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0) v1 = tk.StringVar() v2 = tk.StringVar() v3 = tk.StringVar() v4 = tk.StringVar() e1 = tk.Entry(denglu, textvariable=v1) e2 = tk.Entry(denglu, textvariable=v2) e3 = tk.Entry(denglu, textvariable=v3) e4 = tk.Entry(denglu, textvariable=v4, show="*") e1.grid(row=0, column=1, padx=10, pady=5) e2.grid(row=1, column=1, padx=10, pady=5) e3.grid(row=2, column=1, padx=10, pady=5) e4.grid(row=3, column=1, padx=10, pady=5) def ceshi_sql(): try: conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get()) tk.messagebox.askokcancel("提示","测试连接成功") conn.close() except Exception as e: tk.messagebox.askokcancel("提示", e) tk.Button(denglu, text="连接测试", width=10, command=ceshi_sql).grid(row=4, column=0, sticky='W', padx=10, pady=5) # W左边 tk.Button(denglu, text="退出", width=10, command=root.quit).grid(row=4, column=1, sticky='E', padx=10, pady=5) # E右边 ###第二个框的开始 ###创建框 jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10) jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10) ###引入一个文本框text,设置他的大小为width=80,height=15 text=tk.Text(jg,width=80,height=15) ###创建一个滚动条,因为要显示的内容太多,没有滚动条,看不全部 scroll=tk.Scrollbar(jg) scroll.grid(row=0,column=1) text.grid(row=0,column=0) #创建是上下滚动的条:y scroll.config(command=text.yview) text.config(yscrollcommand=scroll.set) #创建一个def,让他可以被抹个按钮触发 def chaxun(): sql = 'select * from ceshi' ##利用异常处理 try: #主要实现的功能,就是到一个库里面执行一个sql语句,如果大家有需要可以自己设置 chaxun_conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get(), database='ya',charset='cp936') chaxun_conn.autocommit(True) cursor = chaxun_conn.cursor() #text文本域里面最开始显示空白 text.delete(0.0, tk.END) #执行sql语句 cursor.execute(sql) #拿到语句查询结果 jieguo = cursor.fetchall() cursor.close() #连接完一定要断开连接哈,数据库最怕没有这个 ### ###下面的是一个execl的写入,可以自己根据自己的实际情况改写 wb = openpyxl.Workbook() #sheet命名为长期离线企业数据统计' ws = wb.create_sheet('长期离线企业数据统计') #execl里面第一行第一列显示“字段名1” ws.cell(row=1, column=1).value = "字段名1" #execl里面第一行第二列显示“字段名2” ws.cell(row=1, column=2).value = "字段名2" #execl里面第一行第三列显示“字段名3” ws.cell(row=1, column=3).value = "字段名3" ws.cell(row=1, column=4).value = "字段名4" ws.cell(row=1, column=5).value = "字段名5" ws.cell(row=1, column=6).value = "字段名6" ws.cell(row=1, column=7).value = "字段名7" ws.cell(row=1, column=8).value = "字段名8" ws.cell(row=1, column=9).value = "字段名9" ws.cell(row=1, column=10).value = "字段名10" x = 1 for i in jieguo: x+=1 y = 1 ii = str(i) + '\n' text.insert(tk.INSERT,ii) #这个是写入到文本域里面 for n in i: ws.cell(row=x, column=y).value = n y+=1 else: text.insert(tk.END,'===================查询结束====================\n') today = ((str(datetime.datetime.now())).split('.')[0]).replace(':', "-") name = today + '长期离线企业数据.xlsx' ##保存execl wb.save(name) time.sleep(2) ##获取当前路径 pwd = os.getcwd() file_pwd = pwd + '\\' + name mess = '导出的文件保存于:' + file_pwd ##提示出,文件被保存的位置,方便查找文件 tk.messagebox.askokcancel("提示", mess) except Exception as e: text.delete(0.0, tk.END) jieguo = '\n======================不是有效的查询,请先【连接测试】=======================' text.insert(tk.INSERT, jieguo) text.insert(tk.INSERT, e) #关联 #创建一个函数,等待按钮触发 def show(): tk.messagebox.askokcancel("提示", '功能在进一步的确认中......') #创建一个按钮,触发chaxun函数,也就是上面的def函数 tk.Button(root, text="开始查询并导出文件", width=20, command=chaxun).grid(sticky='ws',row=1,column=0,padx=30, pady=5) # W左边 tk.Button(root, text="功能待定", width=10, command=show).grid(sticky='es',row=1,column=0, padx=30, pady=5) # W左边 root.mainloop() # 进入消息循环 结束语 小编写的这个程序是固定死的,但是思路是活得,主要是让大家理解一下思路。 小编的技术有限,希望大家不要建议,如果大家有什么好的建议,不妨评论出来,大家一起分享一下 最后就是希望和大家一起努力,创建更加美好的明天,为社会技术贡献一份自己的力量 |
CopyRight 2018-2019 实验室设备网 版权所有 |